package com.zcsy.manage.persistence.system;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.zcsy.manage.model.base.CellInfo;
import com.zcsy.manage.model.system.Menu;
import com.zcsy.manage.model.system.Role;
import com.zcsy.manage.model.system.RoleCell;
import com.zcsy.manage.model.system.RoleMenu;
import com.zcsy.manage.model.system.RoleUser;

/**
 * @ClassName: RoleDao
 * @Description: 角色持久层接口类
 * @author tanghan barbadosliy@163.com
 * @date 2015年2月1日 下午3:41:37
 *
 */
public interface RoleDao {

	
	/**
	  * @Title: getAll
	  * @Description: 获取角色列表
	  * @return List<Role> 菜单集合
	  * @throws none
	  */
	List<Role> getAll();
	
	/** 
	 * @Title: getRoles 
	 * @Description: 根据条件获取角色列表
	 * @param @param map
	 * @param @return     
	 * @return List<Role>     
	 * @throws 
	 */
	List<Role> getRoles(HashMap<String, Object> map);
	
	/**
	  * @Title: insert
	  * @Description: 新增方法
	  * @param record  新增对象
	  * @return int  新增结果
	  * @throws  none
	  */
	int insert(Role record);
	
	
	/**
	  * @Title: updateByPrimaryKey
	  * @Description: 根据Id，更新角色
	  * @param record  待修改对象(id不为空)
	  * @return int  新增结果
	  * @throws  none
	  */
	int updateByPrimaryKey(Role record);
	
	
	/**
	  * @Title: getRole
	  * @Description: 根据Id，得到角色
	  * @param int  待修改对象(id不为空)
	  * @return role  返回的结果集
	  * @throws  none
	  */
	Role getRole(String roleId);
	
	
	/**
	 * @Description: <br>
	 *   更新角色权限
	 * @param map
	 * @return 
	 * @see 
	 */
	int insertRoleMenu(RoleMenu roleMenu);
	
	/**
	 * Description: <br>
	 *   清空对应角色的权限
	 * @param roleId
	 * @return 
	 * @see 
	 */
	int deleteRoleMenus(String roleId);
	
	/** 
	 * @Title: deleteRoleCells 
	 * @Description: 清空对应角色的小区权限
	 * @param @param roleId
	 * @param @return     
	 * @return int     
	 * @throws 
	 */
	int deleteRoleCells(String roleId);
	
	/**
	 * Description: <br>
	 *     取顶部一级导航菜单
	 * @param roleId  用户所属角色Id
	 * @return  一级导航菜单
	 * @see 
	 */
	Menu getHeaderMenuByRoleId(String roleId);
	
	/**
	 * Description: <br>
	 *     根据主键删除角色
	 * @param roleId  用户所属角色Id
	 * @see 
	 */
	int deleteByPrimaryKey(String roleId);
	
	/**
	 * @Description 插入角色小区关联关系<br>
	 * 
	 * @param roleCell 角色小区对象
	 * @return 1：成功 0：失败
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月19日
	 * @see 
	 */
	int insertRoleCell(RoleCell roleCell);
	
	/**
	 * @Description 更新小区角色关系<br>
	 * 
	 * @param roleCell 角色小区对象
	 * @return 1：成功 0：失败
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月19日
	 * @see 
	 */
	int updateRoleCell(RoleCell roleCell);
	
	/**
	 * @Description 批量删除角色小区关系<br>
	 * 
	 * @param RoleId 角色id
	 * @return  1:成功 0：失败
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月19日
	 * @see 
	 */
	int delRoleCell(String RoleId);
	
	/**
	 * @Description 编辑角色时根据roleId取出所有的cellId的集合<br>
	 * 
	 * @param roleId 角色id
	 * @return 
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月21日
	 * @see 
	 */
	List<String> getCellIdListByRoleId(String roleId);
	
	/**
	 * @Description 根据用户类型获取对应的角色列表<br>
	 * 
	 * @param type 用户类型
	 * @return 返回角色集合
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月22日
	 * @see 
	 */
	List<Role> getRoleList(Map map);
	
	/**
	 * 
	 * @Description 编辑角色时获取到所有叶子菜单的集合<br>
	 * 
	 * @return 
	 * @author lilan 1063972142@qq.com
	 * @date 2016年5月13日
	 * @see
	 */
	List<String> getMenuLeafIdList(HashMap<String , Object> map);
	
	/**
	 * @Description 根据小区id获取角色id集合<br>
	 * 
	 * @param cellId
	 * @return 
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年5月16日
	 * @see 
	 */
	List<String> getRoleListBycellId(Map map);

	
	/** 
	 * @Title: getCellInfosByRoleId 
	 * @Description: 根据用户的角色信息获取对应所有小区信息
	 * @param @param list
	 * @param @return     
	 * @return List<CellInfo>     
	 * @throws 
	 */
	List<CellInfo> getCellInfosByRoleId(List<String> list);
	
	/** 
	 * @Title: getRoleListByPermissioncellId 
	 * @Description: 在用户已有的角色和选择的小区中，取出其中具备所选所有小区权限的角色
	 * @param @param cellId 选择的小区
	 * @param @param roleId 用户的角色范围
	 * @param @return     
	 * @return List<String>   复合条件的角色  
	 * @throws 
	 */
	List<String> getRoleListByPermissioncellId(Map map);

    /**
     * @Description 根据userId取对应的roleId<br>
     * 
     * @param userId 用户id
     * @return 
     * @author yangfan
     * @date 2016年9月7日
     * @see 
     */
	List<RoleUser> getRoleIdByUserId(String userId);

   /**
	 * @Description 查询多个运营公司id是否被角色引用
	 * @param companyIds 多个公司id
	 * @param userType 用户类型
	 * @return 被引用的数目
	 * @author liuying 1075817474@qq.com
	 * @date 2016年9月19日
	 * @see 
	 */
	Integer selectCountByCompanyId(String[] companyIds, int userType);
}
